package com.sikaryofficial.system.service.impl;

import cn.hutool.core.text.CharSequenceUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.google.common.collect.Lists;
import com.sikaryofficial.system.api.model.ip.IpLocationVO;
import com.sikaryofficial.system.domain.GadmCountryGeo;
import com.sikaryofficial.system.domain.dto.CountryGeoDTO;
import com.sikaryofficial.system.domain.mapping.CountryGeoMapping;
import com.sikaryofficial.system.mapper.GadmCountryGeoMapper;
import com.sikaryofficial.system.service.IGadmCountryGeoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 国家地理信息查询
 *
 * @author qinjinyuan
 */
@Service
@DS("hismk_backend")
public class GadmCountryServiceImpl implements IGadmCountryGeoService {

    @Autowired
    private GadmCountryGeoMapper gadmCountryGeoMapper;

    @Autowired
    private Ip2LocationService ip2LocationService;

    /**
     * 国家信息查询
     *
     * @param isoCountryCode
     * @return
     */
    @Override
    @DS("hismk_backend")
    public GadmCountryGeo findCountry(String isoCountryCode) {
        if (CharSequenceUtil.isBlank(isoCountryCode)) {
            return new GadmCountryGeo();
        }
        return gadmCountryGeoMapper.findCountry(isoCountryCode);
    }

    /**
     * 根据经纬度查询国家
     * <p>
     * `longitude` decimal(10,7) DEFAULT NULL COMMENT '经度 范围是 -180°~180°',
     * `latitude` decimal(10,7) DEFAULT NULL COMMENT '纬度 范围是 -90°~90°',
     *
     * @param longitude 经度
     * @param latitude  纬度
     */
    @Override
    public List<CountryGeoDTO> findCountryByPoint(String longitude, String latitude) {
        if (CharSequenceUtil.isBlank(longitude) || CharSequenceUtil.isBlank(latitude)) {
            return Lists.newArrayList();
        }
        String point = String.format("POINT(%s %s)", longitude, latitude);
        List<GadmCountryGeo> gadmCountryGeoList = gadmCountryGeoMapper.findCountryByPoint(point);
        return CountryGeoMapping.INSTANCE.coverToDTOList(gadmCountryGeoList);
    }

    @Override
    public IpLocationVO getGeographyInfo(String iPAddress) {
        return ip2LocationService.getGeographyInfo(iPAddress);
    }
}
